package br.com.jmmarca.controller;

//import br.com.jmmarca.model.ProdutoMidia;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TabHost.TabSpec;
import android.widget.Toast;
import br.com.jmmarca.dao.impl.ProdutoDAO;
import br.com.jmmarca.dao.impl.ProdutoMidiaDAO;
import br.com.jmmarca.model.EventoProduto;
import br.com.jmmarca.model.Produto;
import br.com.jmmarca.model.ProdutoMidia;
import br.com.jmmarca.util.Utils;

public class CrudProdutoMidiaFoto extends GenericTabActivity {

	private static final String TAG_LOG = "App_crudevento";
	List<ProdutoMidia> listaProdutoMidias = new ArrayList<ProdutoMidia>();
	ProdutoMidiaDAO gerenciador;
	ProdutoDAO produtoDAO;

	Integer idRegistro = null;
	Produto produto;

	// ##### GALERIA

	ImageView img;
	Intent intent = null;
	// Declare our Views, so we can access them later
	// YOU CAN EDIT THIS TO WHATEVER YOU WANT
	private static final int SELECT_PICTURE = 1;

	String selectedImagePath;
	
	ListView listaProdutoMidiaListView;
	EditText nome;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.produto_midia_foto_main);
		gerenciador = ProdutoMidiaDAO.getInstance(getApplicationContext());
		produtoDAO = ProdutoDAO.getInstance(getApplicationContext());

		Intent it = getIntent();
		Bundle params = it.getExtras();
		Integer id_produto = params.getInt("id_produto");
		if (id_produto == null) {
			Utils.msg(getApplicationContext(), "Produto não selecionado!");
			return;
		}

		produto = produtoDAO.encontrar(id_produto);

		img = (ImageView) findViewById(R.id.img_prm_view);
		nome = (EditText) findViewById(R.id.edt_pmf_nome);

		((Button) findViewById(R.id.btnGaleria))
				.setOnClickListener(new OnClickListener() {
					public void onClick(View arg0) {
						Intent intent = new Intent();
						intent.setType("image/*");
						intent.setAction(Intent.ACTION_GET_CONTENT);
						startActivityForResult(Intent.createChooser(intent,
								"Selecione a Foto"), SELECT_PICTURE);
					}
				});

		Button salvar = (Button) findViewById(R.id.btnSalvar);
		salvar.setOnClickListener(onSave);
		Button cancelar = (Button) findViewById(R.id.btnCancelar);
		cancelar.setOnClickListener(onCancel);

		TabSpec descritor = getTabHost().newTabSpec("tag1");
		descritor.setContent(R.id.ProdutoMidias);
		descritor.setIndicator("Listar",
				getResources().getDrawable(R.drawable.lista));
		getTabHost().addTab(descritor);

		descritor = getTabHost().newTabSpec("tag2");
		descritor.setContent(R.id.detalhesProdutoMidia);
		descritor.setIndicator("Cadastrar",
				getResources().getDrawable(R.drawable.add));
		getTabHost().addTab(descritor);

		getTabHost().setCurrentTab(1);

		carregaListagem();
		registerForContextMenu(listaProdutoMidiaListView);

	}

	// UPDATED
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == Activity.RESULT_OK) {
			if (requestCode == SELECT_PICTURE) {

				Uri selectedImage = data.getData();
				String[] filePathColumn = { MediaStore.Images.Media.DATA };

				Cursor cursor = getContentResolver().query(selectedImage,
						filePathColumn, null, null, null);
				cursor.moveToFirst();

				int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
				String filePath = cursor.getString(columnIndex);
				cursor.close();

				Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);

				ImageView img = (ImageView) findViewById(R.id.img_prm_view);
				img.setImageBitmap(yourSelectedImage);

				selectedImagePath = filePath;

			}

		}

	}

	public void carregaFormulario() {
		if (idRegistro != null) {
			ProdutoMidia produtoMidia = gerenciador.encontrar(idRegistro);
			nome.setText(produtoMidia.getNome());
			
			Bitmap yourSelectedImage = BitmapFactory.decodeFile(produtoMidia.getCaminho());

			ImageView img = (ImageView) findViewById(R.id.img_prm_view);
			img.setImageBitmap(yourSelectedImage);

			selectedImagePath = produtoMidia.getCaminho();			

		} else {
			selectedImagePath = null;
			
			nome.setText("");
			ImageView img = (ImageView) findViewById(R.id.img_prm_view);
			img.setImageBitmap(null);			
			
		}
	}

	private void carregaListagem() {
		listaProdutoMidiaListView = (ListView) findViewById(R.id.ProdutoMidias);

		listaProdutoMidias = gerenciador.listar();
		ArrayAdapter<ProdutoMidia> adapter = new ArrayAdapter<ProdutoMidia>(
				this, android.R.layout.simple_list_item_1, listaProdutoMidias);

		listaProdutoMidiaListView.setAdapter(adapter);

		listaProdutoMidiaListView.setOnItemClickListener(onListClick);
	}

	private void salvarCadastro() {
		if (selectedImagePath == null) {
			Toast msg = Toast.makeText(this, "O Campo Foto é requerido!",
					Toast.LENGTH_LONG);
			msg.show();
			return;
		}

		ProdutoMidiaDAO produtoMidiaDAO = ProdutoMidiaDAO
				.getInstance(getApplicationContext());
		List<ProdutoMidia> produtoMidias = produtoMidiaDAO.listarPor(
				"caminho = ? and id_produto = ?", new String[] {
						selectedImagePath, produto.getId().toString() });
		if (produtoMidias != null && produtoMidias.size() > 0) {
			Toast msg = Toast.makeText(this,
					"Essa foto é está cadastrada para esse produto",
					Toast.LENGTH_LONG);
			msg.show();
			return;
		}

		Log.w(TAG_LOG, "Salvando Cadastro");

		ProdutoMidia produtoSalvar = new ProdutoMidia(idRegistro);
		produtoSalvar.setNome(nome.getText().toString());
		produtoSalvar.setCaminho(selectedImagePath);
		produtoSalvar.setIdProduto(produto.getId());

		gerenciador.salvar(produtoSalvar);

		selectedImagePath = null;
		// Atualiza lista
		listaProdutoMidias = gerenciador.listar();
		carregaListagem();
		getTabHost().setCurrentTab(0);
		// Registro selecionado
		idRegistro = null;
		carregaFormulario();

		Utils.msg(getApplicationContext(), "Dado Salvo com Sucesso!");
	
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	private OnItemClickListener onListClick = new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ProdutoMidia ev = listaProdutoMidias.get((int) id);
			idRegistro = ev.getId();
			if (idRegistro != null) {
				carregaFormulario();
			}

			getTabHost().setCurrentTab(1);
		}
	};

	private OnClickListener onSave = new OnClickListener() {

		@Override
		public void onClick(View arg0) {
			salvarCadastro();
		}
	};
	private OnClickListener onCancel = new OnClickListener() {

		@Override
		public void onClick(View arg0) {
			idRegistro = null;
			carregaFormulario();
			carregaListagem();
			// Volta para Listagem
			getTabHost().setCurrentTab(0);
		}
	};
	
	/**
	 * MENU DA LISTAGEM
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		if (v.getId() == R.id.ProdutoMidias) {
			AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
			ProdutoMidia registroSelecionado = (ProdutoMidia) listaProdutoMidiaListView
					.getItemAtPosition(acmi.position);
			idRegistro = registroSelecionado.getId();
			MenuInflater inflater = getMenuInflater();
			inflater.inflate(R.menu.menu_listagem, menu);

		}
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		ProdutoMidia registroSelecionado = gerenciador.encontrar(idRegistro);
		switch (item.getItemId()) {
		case R.id.menu_base_alterar:
			// add stuff here
			idRegistro = registroSelecionado.getId();
			if (idRegistro != null) {
				carregaFormulario();
			}

			getTabHost().setCurrentTab(1);

			return true;
		case R.id.menu_base_remover:
			try {
				gerenciador.remover(registroSelecionado);
				Utils.msg(getApplicationContext(),
						"Registro Removido com Sucesso!");
				carregaListagem();
			} catch (Exception e) {
				Utils.msg(getApplicationContext(),
						"Não foi possivel remover, verifique se não existe dependencias!");
			}
			idRegistro = null;
			return true;
		default:
			return super.onContextItemSelected(item);
		}
	}	

}